package com.topfun.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * Created by huangda on 2017/9/6.
 * 配置项加载
 */
public class ConfigLoadUtil {
    // ===========================================================
    // Constants
    // ===========================================================
    private static final Logger        logger    = LoggerFactory.getLogger(ConfigLoadUtil.class);

    private static final AtomicBoolean Initialed = new AtomicBoolean(false);

    private static boolean mDebug         = true;

    private static       String        CFG_DEBUG = "isDebug";
    static {
        loadConfig();
    }
    // ===========================================================
    // Fields
    // ===========================================================

    // ===========================================================
    // Constructors
    // ===========================================================

    // ===========================================================
    // Getter &amp; Setter
    // ===========================================================

    // ===========================================================
    // Methods for/from SuperClass/Interfaces
    // ===========================================================

    // ===========================================================
    // Methods
    // ===========================================================
    private static void loadConfig() {
        if(Initialed.compareAndSet(false, true)) {
            InputStream ins = null;
            try {
                ins = ConfigLoadUtil.class.getClassLoader().getResourceAsStream("config.properties");
                Properties pro = new Properties();
                if (ins != null) {
                    pro.load(ins);
                } else {
                    logger.error("MISSING : config.properties !");
                    Initialed.set(false);
                    pro.load(new StringReader(""));
                }
                mDebug = Boolean.parseBoolean(pro.getProperty(CFG_DEBUG, String.valueOf(mDebug)));
            } catch (IOException ex) {
                logger.error("Parsing Error : config.properties !", ex);
            } finally {
                if (ins != null) {
                    try {
                        ins.close();
                    } catch (IOException e) {
                        logger.error("Close fail : config.properties !", e);
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    public static boolean isDebug(){
        ready("isDebug");
        return mDebug;
    }
    private static void ready(String pFunction){
        if(!Initialed.get()){
            logger.warn(String.format("Server configs unavailable! Using default [%s]", pFunction));
        }
    }
    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}
